﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CI.Caja.BE;
using System.Data.SqlClient;

namespace CI.Caja.DL
{
    public class DA_Turno : IDA_Turno
    {

        public BE_Turno RegistrarTurno(BE_Turno turno)
        {
            string sentencia = "INSERT CA_TURNO (idTurno, txtNombre, horaInicio, horaFin) VALUES (@idTurno, @txtNombre, @horaInicio, @horaFin)";
            //SqlTransaction transaccion;
            using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            {
                conexion.Open();
                //transaccion = conexion.BeginTransaction();

                try
                {
                    using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                    {
                        comando.Parameters.Add(new SqlParameter("@idTurno", turno.IdTurno));
                        comando.Parameters.Add(new SqlParameter("@txtNombre", turno.DescripTurno));
                        comando.Parameters.Add(new SqlParameter("@horaInicio", turno.HoraInicio));
                        comando.Parameters.Add(new SqlParameter("@horaFin", turno.HoraFin));
                        comando.ExecuteNonQuery();
                    }
                }
                catch (SqlException error)
                {
                    throw new Exception(error.Message);
                }
                finally
                {
                    if (conexion != null)
                    {
                        if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
                    }
                }

            }
            return ObtenerTurno(turno.IdTurno);
        }

        public BE_Turno ObtenerTurno(string idTurno)
        {
            BE_Turno turno = null;

            string sentencia = "SELECT idTurno, txtNombre, horaInicio, horaFin FROM CA_TURNO WHERE idTurno=@idTurno";
            using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    comando.Parameters.Add(new SqlParameter("@idTurno", idTurno));

                    SqlDataReader resultado = comando.ExecuteReader();
                    if (resultado.Read())
                    {
                        turno = new BE_Turno();
                        turno.IdTurno = (string)resultado["idTurno"];
                        turno.DescripTurno = (string)resultado["txtNombre"];
                        turno.HoraInicio = (string)resultado["horaInicio"];
                        turno.HoraFin = (string)resultado["horaFin"];
                    }
                }
            }
            return turno;
        }

        public ICollection<BE_Turno> ListarTurno()
        {
            ICollection<BE.BE_Turno> turnoExistente = new List<BE.BE_Turno>();
            BE_Turno turno = null;

            string sentencia = "SELECT idTurno, txtNombre, horaInicio,horaFin FROM CA_TURNO";
            using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    SqlDataReader resultado = comando.ExecuteReader();
                    while (resultado.Read())
                    {
                        turno = new BE_Turno();
                        turno.IdTurno = (string)resultado["idTurno"];
                        turno.DescripTurno = (string)resultado["txtNombre"];
                        turno.HoraInicio = (string)resultado["horaInicio"];
                        turno.HoraFin = (string)resultado["horaFin"];
                        turnoExistente.Add(turno);
                    }
                }
            }
            return turnoExistente;
        }

        public BE_Turno ActualizarTurno(BE_Turno turnoActualizado)
        {
            string sentencia = "UPDATE CA_TURNO SET txtNombre = @txtNombre, horaInicio = @horaInicio, horaFin = @horaFin WHERE idTurno = @idTurno";
            //SqlTransaction transaccion;
            using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            {
                conexion.Open();
                //transaccion = conexion.BeginTransaction();

                try
                {
                    using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                    {
                        comando.Parameters.Add(new SqlParameter("@idTurno", turnoActualizado.IdTurno));
                        comando.Parameters.Add(new SqlParameter("@txtNombre", turnoActualizado.DescripTurno));
                        comando.Parameters.Add(new SqlParameter("@horaInicio", turnoActualizado.HoraInicio));
                        comando.Parameters.Add(new SqlParameter("@horaFin", turnoActualizado.HoraFin));
                        comando.ExecuteNonQuery();
                    }
                }
                catch (SqlException error)
                {
                    throw new Exception(error.Message);
                }
                finally
                {
                    if (conexion != null)
                    {
                        if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
                    }
                }

            }
            return ObtenerTurno(turnoActualizado.IdTurno);
        }

        public string ObtenerCodigo()
        {
            string codigo = "";
            string sentencia = "Select MAX(idTurno)+1 as Codigo from CA_TURNO";
            using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    SqlDataReader resultado = comando.ExecuteReader();
                    if (resultado.Read())
                    {
                        codigo = resultado["Codigo"].ToString();

                    }
                }
            }
            return codigo;
        }
        public int ValidaDuplicado(BE_Turno turnoActualizado) {
            int codigo = 0;
            string sentencia = "Select count(*) as Codigo from CA_TURNO where  horaInicio=@horaInicio and horaFin=@horaFin ";
            using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    
                    comando.Parameters.Add(new SqlParameter("@horaInicio", turnoActualizado.HoraInicio));
                    comando.Parameters.Add(new SqlParameter("@horaFin", turnoActualizado.HoraFin));

                    SqlDataReader resultado = comando.ExecuteReader();
                    if (resultado.Read())
                    {
                        codigo =Convert.ToInt32(resultado["Codigo"]);
                    }
                }
            }
            return codigo;
        }
    }
}
